home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Purity / Purity #48 (1995-06-25)(PackMAN)(DE)[WB].zip / Purity #48 (1995-06-25)(PackMAN)(DE)[WB].adf / Konverter / HexStr2Long.p < prev    next >
Text File  |  1995-06-24  |  1KB  |  69 lines

  1. { konvertiert Hexstrings in Longzahlen }
  2. { by Sebastian Erbert 6/95 }
  3. { Stringformat: C (0x????) oder normal (aber ohne $) }
  4. { note: nicht perfekt, aber es funktioniert }
  5.  
  6.  
  7.  
  8. FUNCTION HexStrToLong(HexStr: String): LongInt;
  9.  VAR i,k:Integer;
  10.    l: LongInt;
  11.    c: Char;
  12.    f: Array [-8..8] OF ShortInt;
  13.     NixHexZahl: Boolean;
  14.  
  15.  
  16.   BEGIN
  17.  NixHexZahl:=FALSE;
  18.  FOR i:=1 TO StrLen(HexStr) DO HexStr[i]:=UpCase(HexStr[i]);
  19.  i:=Pos("X",HexStr);
  20.  IF i=2 THEN Delete(HexStr,1,2);
  21.  FOR i:=-8 TO 8 DO f[i]:=0;
  22.  FOR i:=1 TO StrLen(HexStr) DO BEGIN
  23.   c:=HexStr[i];
  24.   k:=ORD(c);
  25.   CASE k OF
  26.     48: f[i]:=00;
  27.    49: f[i]:=01;
  28.    50: f[i]:=02;
  29.    51: f[i]:=03;
  30.    52: f[i]:=04;
  31.    53: f[i]:=05;
  32.    54: f[i]:=06;
  33.    55: f[i]:=07;
  34.    56: f[i]:=08;
  35.    57: f[i]:=09;
  36.    65: f[i]:=10;
  37.    66: f[i]:=11;
  38.    67: f[i]:=12;
  39.    68: f[i]:=13;
  40.    69: f[i]:=14;
  41.    70: f[i]:=15;
  42.    OTHERWISE NixHexZahl:=TRUE;
  43.   END;
  44.  END;
  45.  k:=StrLen(HexStr);
  46.  l:=f[k];
  47.  l:=l+(f[k-1] SHL 04)+(f[k-2] SHL 08)+(f[k-3] SHL 12)+(f[k-4] SHL 16)+
  48.       (f[k-5] SHL 20)+(f[k-6] SHL 24)+(f[k-7] SHL 28);
  49.  
  50. { dito:
  51.  l:=f[k]+f[k-1]*16+f[k-2]*16*16+f[k-3]*16*16*16+f[k-4]*16*16*16*16+
  52.    f[k-5]*16*16*16*16*16+f[k-6]*16*16*16*16*16*16+
  53.   f[k-7]*16*16*16*16*16*16*16;
  54. }
  55.  IF NixHexZahl THEN l:=-1;
  56.  HexStrToLong:=l;
  57. END;
  58.  
  59. begin
  60.  
  61. writeln(hexstrtolong("f"));
  62. writeln(hexstrtolong("0x20"));
  63. writeln(hexstrtolong("69024"));
  64. writeln(hexstrtolong("69"));
  65. writeln(hexstrtolong("h7"));
  66.  
  67. end.
  68.  
  69.